package com.baiyun.config;

import com.baiyun.interceptor.LoginCheckInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
    private final LoginCheckInterceptor loginCheckInterceptor;

    //解决跨域问题
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 调用父接口的方法，添加CORS映射规则
        registry.addMapping("/**")
                // 应用到所有路径（所有URL都会遵循这些CORS规则）
                .allowedOriginPatterns("*")
                // 允许所有来源的请求（通配符"*"表示任何来源）
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                // 允许的HTTP方法：GET、POST、PUT、DELETE
                .allowedHeaders("*")
                // 允许所有请求头（通配符"*"表示任何请求头）
                .allowCredentials(true)
                // 允许携带凭证（如Cookie），注意：当allowCredentials为true时，allowedOriginPatterns不能设置为"*"
                .maxAge(3600);
        // 预检请求的有效期为3600秒（1小时），在此期间内浏览器不会再次发送预检请求
    }

    //注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginCheckInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/login","/user","/register")
                //排除swagger相关
                .excludePathPatterns("/doc.html","/webjars/**", "/swagger-resources", "/swagger-resources/**", "/v3/**", "/favicon.ico", "Mozilla/**");
    }
}
